package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import bean.OSBean;
import bean.funcionarioBean;

public class funcionarioDao {

	/*
	 * automatico
	 */
	public void inserir(Connection conn, funcionarioBean funcionario)
			throws SQLException {

		String sql = "insert into funcionario(		" + 
						"nome,						" + 
						"cpf, 						" + 
						"telefone, 					" + 
						"sexo, 						" + 
						"comissao, 					" + 
						"idfuncao, 					" +
						"idempresa, 				" +
						"datacadastro, 				" + 
						"login, 					" + 
						"senha) 					" + 
						"values(					" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?,							" + 
						"?)							";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, funcionario.getNome());
		ps.setString(2, funcionario.getCpf());
		ps.setString(3, funcionario.getTelefone());
		ps.setString(4, funcionario.getSexo());
		ps.setDouble(5, funcionario.getComissao());
		ps.setInt(6, funcionario.getIdFuncao());
		ps.setInt(7, funcionario.getIdEmpresa());
		ps.setTimestamp(8, funcionario.getDataCadastro());
		ps.setString(9, funcionario.getLogin());
		ps.setString(10, funcionario.getSenha());

		ps.execute();
		ps.close();
	}

	public void alterar(Connection conn, funcionarioBean funcionario)
			throws SQLException {

		String sql = "update funcionario set 		" + 
						"nome = ?, 					" + 
						"cpf = ?, 					" + 
						"telefone = ?, 				" + 
						"sexo = ?, 					" + 
						"comissao = ?, 				" + 
						"idfuncao = ?, 				" + 
						"login = ?, 				" + 
						"senha = ? 					" + 
						" where id = ?				";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, funcionario.getNome());
		ps.setString(2, funcionario.getCpf());
		ps.setString(3, funcionario.getTelefone());
		ps.setString(4, funcionario.getSexo());
		ps.setDouble(5, funcionario.getComissao());
		ps.setInt(6, funcionario.getIdFuncao());
		ps.setString(7, funcionario.getLogin());
		ps.setString(8, funcionario.getSenha());
		ps.setInt(9, funcionario.getId());

		ps.execute();
		ps.close();
	}

	public void remover(Connection conn, funcionarioBean funcionario) throws SQLException {

		String sql = "delete from funcionario where id = ?";
		PreparedStatement ps;
		ps = conn.prepareStatement(sql);
		ps.setInt(1, funcionario.getId());
		ps.execute();
		ps.close();

	}
	public void exclucaoLogica(Connection conn, funcionarioBean funcionario) throws SQLException {
		
		String sql = "update funcionario set ativo = '0' where id = ?";
		PreparedStatement ps;
		ps = conn.prepareStatement(sql);
		ps.setInt(1, funcionario.getId());
		ps.execute();
		ps.close();
		
	}

	/**
	 * sem uso
	 */
	public ArrayList<funcionarioBean> getList(Connection conn)
			throws SQLException {

		String sql = "select * from funcionario where ativo = '1' order by nome";

		PreparedStatement ps = conn.prepareStatement(sql);

		ResultSet rs = ps.executeQuery();
		ArrayList<funcionarioBean> funcionarios = new ArrayList<funcionarioBean>();
		while (rs.next()) {
			funcionarioBean funcionario = new funcionarioBean();
			funcionario.setId(rs.getInt("id"));
			funcionario.setNome(rs.getString("nome"));
			funcionario.setCpf(rs.getString("cpf"));
			funcionario.setTelefone(rs.getString("telefone"));
			funcionario.setSexo(rs.getString("sexo"));
			funcionario.setComissao(rs.getDouble("comissao"));
			funcionario.setAtivo(rs.getInt("ativo"));
			funcionario.setIdFuncao(rs.getInt("idfuncao"));
			funcionario.setDataCadastro(rs.getTimestamp("datacadastro"));
			funcionario.setLogin(rs.getString("login"));
			funcionario.setSenha(rs.getString("senha"));
			funcionarios.add(funcionario);
		}
		ps.close();
		rs.close();

		return funcionarios;

	}
	
	public ArrayList<funcionarioBean> getAll(Connection conn, funcionarioBean func)
			throws SQLException {
	
		String sql = "	select 								"+
					 "		u.id,							"+ 
					 "		u.nome as usuario, 				"+
					 "		comissao,						"+
					 "		cpf,							"+
					 "		datacadastro,					"+
					 "		telefone,						"+
					 "		f.nome as funcao				"+
					 "	from								"+
					 "		funcionario u,					"+
					 "		funcao f						"+
					 "	where								"+
					 "		ativo = '1'						"+
					 "	and									"+
					 "		idfuncao = f.id					"+
					 "	and									"+
					 "		idempresa = ?					"+
					 "	and									"+
					 "		f.id <> 6						"+
					 "	order by							"+
					 "		u.nome							";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, func.getIdEmpresa());
		
		ResultSet rs = ps.executeQuery();
		ArrayList<funcionarioBean> funcionarios = new ArrayList<funcionarioBean>();
		while (rs.next()) {
			funcionarioBean funcionario = new funcionarioBean();
			funcionario.setId(rs.getInt("id"));
			funcionario.setNome(rs.getString("usuario"));
			funcionario.setCpf(rs.getString("cpf"));
			funcionario.setTelefone(rs.getString("telefone"));
			funcionario.setComissao(rs.getDouble("comissao"));
			funcionario.setFuncao(rs.getString("funcao"));
			funcionario.setDataCadastro(rs.getTimestamp("datacadastro"));
			funcionarios.add(funcionario);
		}
		ps.close();
		rs.close();
		
		return funcionarios;
		
	}
	
	/*
	 * aualizaFieldsetDesigner.jsp
	 */
	public ArrayList<funcionarioBean> getListaDesigner(Connection conn, funcionarioBean func)
			throws SQLException {

		String sql = "select * from funcionario where idfuncao = '2' and idempresa = ? and ativo = '1' order by nome";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, func.getIdEmpresa());

		ResultSet rs = ps.executeQuery();
		ArrayList<funcionarioBean> funcionarios = new ArrayList<funcionarioBean>();
		while (rs.next()) {
			funcionarioBean funcionario = new funcionarioBean();
			funcionario.setId(rs.getInt("id"));
			funcionario.setNome(rs.getString("nome"));
			funcionario.setCpf(rs.getString("cpf"));
			funcionario.setTelefone(rs.getString("telefone"));
			funcionario.setSexo(rs.getString("sexo"));
			funcionario.setComissao(rs.getDouble("comissao"));
			funcionario.setAtivo(rs.getInt("ativo"));
			funcionario.setIdFuncao(rs.getInt("idfuncao"));
			funcionario.setDataCadastro(rs.getTimestamp("datacadastro"));
			funcionario.setLogin(rs.getString("login"));
			funcionario.setSenha(rs.getString("senha"));
			funcionarios.add(funcionario);
		}
		ps.close();
		rs.close();

		return funcionarios;

	}

	public funcionarioBean getfuncionario(Connection conn,
			funcionarioBean funcionarioBean) throws SQLException {

		String sql = "select * from funcionario where id = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, funcionarioBean.getId());

		ResultSet rs = ps.executeQuery();

		funcionarioBean funcionario = new funcionarioBean();

		if (rs.next()) {
			funcionario.setId(rs.getInt("id"));
			funcionario.setNome(rs.getString("nome"));
			funcionario.setCpf(rs.getString("cpf"));
			funcionario.setTelefone(rs.getString("telefone"));
			funcionario.setSexo(rs.getString("sexo"));
			funcionario.setComissao(rs.getDouble("comissao"));
			funcionario.setAtivo(rs.getInt("ativo"));
			funcionario.setIdFuncao(rs.getInt("idfuncao"));
			funcionario.setDataCadastro(rs.getTimestamp("datacadastro"));
			funcionario.setLogin(rs.getString("login"));
			funcionario.setSenha(rs.getString("senha"));
		}

		ps.close();
		rs.close();

		return funcionario;

	}
	
	/**
	 * sem uso
	 */

	public funcionarioBean getOsFuncionarioDesigne(Connection conn, OSBean os) throws SQLException {

		String sql = "select nome from funcionario f, designer d, os o where o.id = ? and f.id = d.iddesigner and d.idos = o.id";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, os.getId());

		ResultSet rs = ps.executeQuery();

		funcionarioBean funcionario = new funcionarioBean();

		if (rs.next()) {
			
			funcionario.setNome(rs.getString("nome"));
			
		}

		ps.close();
		rs.close();

		return funcionario;

	}
	
	/**
	 * sem uso
	 */
	public funcionarioBean getOsFuncionarioSecretari(Connection conn, OSBean os) throws SQLException {

		String sql = "select * from funcionario f, secretario d, os o where o.id = ? and f.id = d.idsecretario and d.idos = o.id";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, os.getId());

		ResultSet rs = ps.executeQuery();

		funcionarioBean funcionario = new funcionarioBean();

		if (rs.next()) {
			
			funcionario.setNome(rs.getString("nome"));
			funcionario.setCpf(rs.getString("cpf"));
			funcionario.setTelefone(rs.getString("telefone"));
			funcionario.setSexo(rs.getString("sexo"));
			funcionario.setComissao(rs.getDouble("comissao"));
			funcionario.setAtivo(rs.getInt("ativo"));
			funcionario.setIdFuncao(rs.getInt("idfuncao"));
			funcionario.setDataCadastro(rs.getTimestamp("datacadastro"));
		}

		ps.close();
		rs.close();

		return funcionario;

	}

	public ArrayList<funcionarioBean> getListFuncionarioFuncao(Connection conn, funcionarioBean func)
			throws SQLException {

		String sql = "select * from funcionario where idfuncao = ? and idempresa = ? and ativo = '1' order by nome";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, func.getIdFuncao());
		ps.setInt(2, func.getIdEmpresa());

		ResultSet rs = ps.executeQuery();
		ArrayList<funcionarioBean> funcionarios = new ArrayList<funcionarioBean>();
		while (rs.next()) {
			funcionarioBean funcionario = new funcionarioBean();
			funcionario.setId(rs.getInt("id"));
			funcionario.setNome(rs.getString("nome"));
			funcionario.setCpf(rs.getString("cpf"));
			funcionario.setTelefone(rs.getString("telefone"));
			funcionario.setSexo(rs.getString("sexo"));
			funcionario.setComissao(rs.getDouble("comissao"));
			funcionario.setAtivo(rs.getInt("ativo"));
			funcionario.setIdFuncao(rs.getInt("idfuncao"));
			funcionario.setDataCadastro(rs.getTimestamp("datacadastro"));
			funcionario.setLogin(rs.getString("login"));
			funcionario.setSenha(rs.getString("senha"));
			funcionarios.add(funcionario);
		}
		ps.close();
		rs.close();

		return funcionarios;

	}

	/**
	 * sem uso
	 */
	public String getNom(Connection conn, Integer id) throws SQLException {

		String sql = "select * from funcionario where id = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, id);

		ResultSet rs = ps.executeQuery();
		String nome = "";

		if (rs.next()) {
			nome = rs.getString("nome");
		}

		ps.close();
		rs.close();

		return nome;

	}

	public funcionarioBean validaLogin(Connection conn, String login,
			String senha) throws SQLException {

		String sql = "select 						" +
					 "	f.id as id,					" +
					 "	f.nome as nome,				" +
					 "	f.idfuncao as idfuncao,		" +
					 "	f.idempresa	as idempresa	" +
					 "from 							" +
					 "	funcionario f, 				" +
					 "	empresa e 					" +
					 "where 						" +
					 "	f.login = ? 				" +
					 "and 							" +
					 "	f.senha = ? 				" +
					 "and 							" +
					 "	f.ativo = '1' 				" +
					 "and 							" +
					 "	f.idempresa = e.id 			";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, login);
		ps.setString(2, senha);

		ResultSet rs = ps.executeQuery();

		funcionarioBean funcionario = new funcionarioBean();
		if (rs.next()) {
			funcionario.setId(rs.getInt("id"));
			funcionario.setNome(rs.getString("nome"));
			funcionario.setIdFuncao(rs.getInt("idfuncao"));
			funcionario.setIdEmpresa(rs.getInt("idempresa"));

		}

		return funcionario;
	}

	public boolean validaLogin(Connection conn, String login) throws SQLException {
		
		String sql = "select login from funcionario where login = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, login);
		
		ResultSet rs = ps.executeQuery();
		if (rs.next()){
			return true;
		}
		return false;
	}

	public boolean mesmoLogin(Connection conn, String login, Integer id) throws SQLException {
		
		String sql = "select login from funcionario where id = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, id);
		
		ResultSet rs = ps.executeQuery();
		String rsLogin = "";
		if (rs.next()){
			rsLogin = rs.getString("login");
		}
		if(rsLogin.equals(login)){
			return false;
		}else{
			return true;
		}
	}

}
